#include "recboxitem.h"
#include "ui_recboxitem.h"
#include <QDebug>
#include <QPropertyAnimation>

RecBoxItem::RecBoxItem(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::RecBoxItem)
{
    ui->setupUi(this);
    //安装事件过滤器(事件拦截)
    ui->musicImageBox->installEventFilter(this);
}

RecBoxItem::~RecBoxItem()
{
    delete ui;
}
//事件过滤(实现推荐页鼠标进入时控件上移效果)拦截指定控件的指定事件
bool RecBoxItem::eventFilter(QObject *watched, QEvent *event)
{
    //检测控件，只要musicImageBox控件发出的事件
    if(watched==ui->musicImageBox)
    {
        //检测事件，鼠标进入事件-上移动画
        if(event->type()==QEvent::Enter)
        {
            //添加图片上移动画
            //创建动画类，指定该动画的控件为ui->musicImageBox 动画风格为geometry矩形
            QPropertyAnimation *animation=new QPropertyAnimation(ui->musicImageBox,"geometry");
            //设置周期时间
            animation->setDuration(150);
            //上移动画的效果
            //设置起始帧
            animation->setStartValue(QRect(9,9,ui->musicImageBox->width(),ui->musicImageBox->height()));
            //设置结束帧
            animation->setEndValue(QRect(9,0,ui->musicImageBox->width(),ui->musicImageBox->height()));
            //设置动画执行次数为1次
            animation->setLoopCount(1);
            //启动该动画
            animation->start();

            //此处，等到动画执行结束后，动画对象会发送一个finished的信号，表示动画执行结束
            //这里通过使用信号槽机制，来实现释放动画对象的操作
            connect(animation,&QPropertyAnimation::finished,this,[=](){
               delete animation;//释放这个动画对象
            });
        }
        else if(event->type()==QEvent::Leave)
        {
            //鼠标离开事件-下移动画
            //添加图片下移动话
            QPropertyAnimation *animation=new QPropertyAnimation(ui->musicImageBox,"geometry");
            animation->setDuration(150);
            animation->setStartValue(QRect(9,0,ui->musicImageBox->width(),ui->musicImageBox->height()));
            animation->setEndValue(QRect(9,9,ui->musicImageBox->width(),ui->musicImageBox->height()));
            animation->setLoopCount(1);
            animation->start();
            //动画执行完进行销毁动画对象
            connect(animation,&QPropertyAnimation::finished,this,[=](){
               delete animation;//释放这个动画对象
            });
        }
        return true;//不用处理这些事件了
    }
    //剩下的事件由父类去处理即可
    return QObject::eventFilter(watched,event);
}
//给RecBoxItem对象设置推荐文本
void RecBoxItem::setRecText(const QString &text)
{
    ui->recBoxItemText->setText(text);
}
//给RecBoxItem对象设置推荐图片
void RecBoxItem::setRecImage(const QString &imagePath)
{
    //通过QSS来进行设置
    QString style="background-image:url("+imagePath+");";
    ui->recMusicImage->setStyleSheet(style);
}
